INGESTION <- function(EXP.LIST, REPLICATES1, REPLICATES2, DATA)
                      
{

install.packages("plotrix")
require(plotrix)



###LEITURA DOS ARQUIVOS DE CONTAGEM###
ALL.FILES <- list(file=NULL) #Cria uma lista vazia para armazenar todos os arquivos do experimento;
for (i in 1:length(EXP.LIST)){ #Corre o vetor contendo o nome dos arquivos para armazenamento dos dados dentro da lista;
  x <- read.table(EXP.LIST[i], skip=37, nrows=255, header=TRUE, sep="\t") #Le o arquivo correspondente ao nome da posicao "i" do vetor e armazena em um objeto temporario;
  x1 <- data.frame(x) #Cria um data.frame com os dados do arquivo e armazena em um segundo obejto temporario;
  ALL.FILES[i] <- list(x1) #Armazena o objeto temporario (data.frame) em sua respectiva posicao na lista.
}
######################################



###DETERMINACAO DO FATOR DE CONVERSAO ADEQUADO CONFORME EDLER (1979)###
if(DATA$algae[1] == "FLA") ED <- 0.11 #Fator de convercao para algas flageladas;
else  ED <- 0.13 #Fator de conversao para dinoflagelados;
#################################################



###CALCULO DO NUMERO MEDIO DE FEMEAS INCUBADAS###
NT <- (DATA$f.start + DATA$f.end)/2 #Numero medio de femeas incubadas;
#################################################



###CALCULO DO PERIODO DE INCUBACAO EM HORAS###
DATE1 <- rep("2012-04-19", times=15)
TIME1 <- paste(DATE1, DATA$start)
TIME.START<- strptime(TIME1, "%Y-%m-%d %H:%M:%S")
DATE2 <- rep("2012-04-20", times=15)
TIME2 <- paste(DATE2, DATA$end)
TIME.END <- strptime(TIME2, "%Y-%m-%d %H:%M:%S")
TIMES <- difftime(TIME.END, TIME.START, units="hours") 
###
TIMES <- as.numeric(TIMES) #Intervalo de incubao de cada uma das garrafas experimentais;
##############################################



###CALCULO DAS DENSIDADES CELULARES DENTRO DOS INTERVALOS DE TAMANHO DESEJADOS###
ALL.CONCENTRATIONS <- rep(0, each= length(ALL.FILES))
for(i in 1:length(ALL.FILES)){ #Corre a lista de que contemn todos os arquivos;
  x3 <- sum(ALL.FILES[[i]]$X.mL[ALL.FILES[[i]]$um<(DATA$d.upper[1]) & ALL.FILES[[i]]$um>(DATA$d.lower[1])]) #Extrai as densidades dentro do intervalos de tamanho desejado para cada um dos arquivos;
  ALL.CONCENTRATIONS[i] <- x3 #Armazena as densidades extraidas em um novo vetor;
}
#################################################################################



###CALCULO DOS VALORES MEDIOS DE CADA AMOSTRA CONSIDERANDO OS DIFERENTES NUMEROS DE CONTAGENS###
MEAN.CONCENTRATIONS <- rep(0, each= length(REPLICATES1)) #Cria um vetor nulo para armazenar os valores medios das densidades celulares;
COEFF.VAR.CONCENTRATIONS <- rep(0, each= length(REPLICATES1)) #Cria um vetor nulo para armazenar os valores medios dos coeficientes de variacao;
a=1 #Inicializa o indice "a";
b=REPLICATES1[1] #"Inicializa o indice "b";
for(i in 1:length(REPLICATES1)){ #Corre o vetor "REPLICATES1" para preenchimento do vetor "ALL.DENSITIES" de acordo com as posicoes adequadas;
  x4 <- mean(ALL.CONCENTRATIONS[a:b]) #Calcula as medias dentro das posicoes adequadas do vetor "ALL.DENSITIES";
  x5 <- (sd(ALL.CONCENTRATIONS[a:b])/x4)*100 #Calcula os coeficientes de variacao das medias calculadas;
  MEAN.CONCENTRATIONS[i] <- x4*ED*(DATA$biov[1])*(DATA$fc[1]) #Converte as medias para valores em umg/L e armazena em um novo vetor;
  COEFF.VAR.CONCENTRATIONS[i] <- x5 #Armazena os coeficientes de variacao calculados;
  a=b+1 #Atualiza o valor de "a";
  i=i+1 #Corrige o valor de "i" para atualizacao do valor de "b";
  b=a+REPLICATES1[i]-1 #Atualiza do valor de "b";
}
##################################################################################



###CALCULOS DAS DENSIDADES MEDIAS (EM CARBONO) NOS FRASCOS INICIAIS E CONTROLES###
CONC.INICIAL.MEAN <- rep(0, each=5) #Cria um vetor nulo para armazenar os valores medios das concentracoes iniciais;
CONC.CONTROL.MEAN <- rep(0, each=5) #Cria um vetro nulo para armazenar os valores medios das concentracoes nos frascos controles;
ia=1 #Inicia o indice "ia";
ib=REPLICATES2[1] #Inicia o indice "ib";
ca=4 #Inicia o indice "ca";
cb= ca + REPLICATES2[2] -1 #Inicia o indice "cb";
for(i in 1:5){
  x6 <- mean(MEAN.CONCENTRATIONS[ia:ib]) #Calcula as medias das concentracoes iniciais e atribui a variavel "x6";
  x7 <- mean(MEAN.CONCENTRATIONS[ca:cb]) #Calcula as medias das concentracoes controle e atribui a variavel "x7";
  CONC.INICIAL.MEAN[i] <- x6 #Cria um vetor contendo as concentracoes inciais medias nos frascos de incubacao para os cinco tratamentos;
  CONC.CONTROL.MEAN[i] <- x7 #Cria um vetor contendo as concentracoes controle medias nos frascos de incubacao para os cinco tratamentos;
  ia <- ib + REPLICATES2[i*3-1] + REPLICATES2[i*3] + 1 #Atualiza os indices ia e ib: posicao anterior mais a soma dos dados compreendidos no vetor
  ca <- cb + REPLICATES2[i*3] + REPLICATES2[i*3+1] + 1 #MEAN.CONCENTRATIONS que correspondem as posicoes no vetor REPLICATES2 (anda no vetor
  i = i + 1 #Corrige o valor de i;                     #MEAN.CONCENTRATIONS de acordo com um numero ditado pelo vetor REPLICATES2)
  ib <- ia + REPLICATES2[i*3-2] - 1 #Atualiza os indices ib e cb;
  cb <- ca + REPLICATES2[i*3-1] - 1
} 
##################################################################################



###CALCULO DAS TAXAS DE INGESTAO PARA CADA UM DOS CINCO TRATAMENTOS###
TEM <- c(MEAN.CONCENTRATIONS[7:9], MEAN.CONCENTRATIONS[16:18],
         MEAN.CONCENTRATIONS[25:27],MEAN.CONCENTRATIONS[34:36],
         MEAN.CONCENTRATIONS[42:44])

TREAT <- c(CONC.INICIAL.MEAN[1], CONC.INICIAL.MEAN[1], CONC.INICIAL.MEAN[1], #OBS.: Esta parte eu tentei simplificar com a funo "rep",
           CONC.INICIAL.MEAN[2], CONC.INICIAL.MEAN[2], CONC.INICIAL.MEAN[2], #mas no consegui, nem atravez do "each",nem atravez do "times";
           CONC.INICIAL.MEAN[3], CONC.INICIAL.MEAN[3], CONC.INICIAL.MEAN[3],
           CONC.INICIAL.MEAN[4], CONC.INICIAL.MEAN[4], CONC.INICIAL.MEAN[4],
           CONC.INICIAL.MEAN[5], CONC.INICIAL.MEAN[5], CONC.INICIAL.MEAN[5])

CONT <- c(CONC.CONTROL.MEAN[1], CONC.CONTROL.MEAN[1], CONC.CONTROL.MEAN[1], 
          CONC.CONTROL.MEAN[2], CONC.CONTROL.MEAN[2], CONC.CONTROL.MEAN[2],                                                                 
          CONC.CONTROL.MEAN[3], CONC.CONTROL.MEAN[3], CONC.CONTROL.MEAN[3],
          CONC.CONTROL.MEAN[4], CONC.CONTROL.MEAN[4], CONC.CONTROL.MEAN[4],
          CONC.CONTROL.MEAN[5], CONC.CONTROL.MEAN[5], CONC.CONTROL.MEAN[5])

IR=rep(0,each=15) #Cria um vetor nulo para armazenar as taxas de ingestao;
j=1 #Indice criado para alterar os valores de "NT" e "TIMES";
for(i in 1:15){ 
  x8 <- (((TEM[i] - TREAT[i]) / (log(TEM[i] / TREAT[i]))) * (((DATA$vol[1])/NT[j]) *  log((TREAT[i] * CONT[i])/(TREAT[i] * TEM[i]))))/TIMES[j] #Equacao de ingestao (FROST, 1972) adaptadas por KIRBOE et al. (1982);
  j = j+1 #Atualiza do valor de "j";
  IR[i] <- x8 #Armazena o valor da variavel "x8" no velor "IR" (Taxa de ingestao);
}
#####################################################################################



###SAIDAS DA FUNCAO###



###SAIDAS EM ARQUIVO######################################################

###RESUMO CONTEMPLANDO TODOS OS DADOS#####################################
RESUMO.IR <- summary(IR) #Cria um resumo estatisco considerando todas as taxas de ingestao calculadas;
RESUMO.IR$Sd <- sd(IR) #Adiciona ao resumo criado a variavel "sd";

###RESUMO CONTEMPLANDO APENAS DADOS POSITIVOS#############################
IR.POS <- c() #Cria um vetor nulo para armazenar as taxas de ingestao positivas;
for(i in 1:15){ #Corre o vetor "IR" armazenando somente valores positivos;
  if(IR[i] >= 0)
     IR.POS[i] <- IR[i]
  } 
IR.POSITIVE <- as.vector(na.exclude(IR.POS)) #Cria um vetor contendo apenas os valores positivos (sem os "NAs");
RESUMO.IR.POSITIVE <- summary(IR.POSITIVE) #Cria um resumo estatistico considerando apenas as taxas de ingestao positivas;
RESUMO.IR.POSITIVE$Sd <- sd(IR) #Adiciona ao resumo criado a variavel "sd";                  
RESUMO.TOT <- data.frame(RESUMO.IR, RESUMO.IR.POSITIVE) #Cria um data.frame reunindo os resumos;
###RESUMO CONTEMPLANDO OS VALORES MEDIOS##################################
RESULT <- data.frame(TREAT,IR) #Cria um data.frame das taxas de ingestao para cada um dos tratamentos;
IR.MEAN <- (tapply(RESULT$IR, RESULT$TREAT, mean)) #Calcula a media das taxas de ingestao para cada um dos tratamentos (Obs.: #1->#5);                          
IR.SD <- (tapply(RESULT$IR, RESULT$TREAT, sd)) #Calcula os desvios das taxas de ingestao para cada um dos tratamentos (Obs.: #5->#1);;
IR.STD.ERROR <- tapply(RESULT$IR, RESULT$TREAT, std.error) #Calcula os erros das taxas de ingestao para cada um dos tratamentos (Obs.: #1->#5);;
RESUMO.MEANS <- data.frame(IR.MEAN, IR.SD, IR.STD.ERROR) #Cria um data.frame reunindo as variaveis calculadas;
##########################################################################
C <- rep(1:5, each=3)
RESULT.STAT <- data.frame(C,IR) #Cria um data.frame com os tratamentos na forma de fatores;
##########################################################################

 

###SAIDAS GRAFICAS: DISPERSAO E VALORES MEDIOS############################

X11()
par(mfrow = c(1,2))

###PLOT A#################################################################
plot(RESULT, xlab=expression("Concentrao de alimento (g C L"^"-1"*")"),
     ylab=expression("Resposta funcional (g C copepode"^"-1 "*"dia"^"-1"*")"),
     xlim=c(0,450), ylim=c(-0.2,0.6),
     pch=19, bty="L")
text(x=380, y=0.6, "A", font=2)
text(x=380, y=0.55, DATA$EXP[1])

###PLOT B#################################################################
CONC.MEAN.INC <- sort(CONC.INICIAL.MEAN)
RESULT2 <- data.frame(CONC.MEAN.INC, IR.MEAN)    
plot(RESULT2, xlab=expression("Concentrao de alimento (g C L"^"-1"*")"),
     ylab="", xlim=c(0,450), ylim=c(-0.2,0.6),
     pch=19, bty= "L")
text(x=380, y=0.6, "B", font=2)
text(x=380, y=0.55, DATA$EXP[1])
for(i in 1:5){
arrows(CONC.MEAN.INC[i],IR.MEAN[i]+IR.STD.ERROR[i],
       CONC.MEAN.INC[i], IR.MEAN[i]-IR.STD.ERROR[i],
       angle=90, code=3, length=0)
}

savePlot("RESPOSTA FUNCIONAL", type="jpeg")
###########################################################################

write.csv(RESUMO.TOT, file= "RESUMO.TOT.csv")
write.csv(RESULT, file= "INGESTION.csv")
write.csv(RESULT.STAT, file = "INGESTION.STAT.csv")

}

###ENTRADAS DA FUNCAO IR########################################
###EXEMPLO: EXPERIMENTO COM A MICROALGA RHODOMONAS CF. SALINA###
#Cria um objeto com o nome do experimento para posterior identificacao das saidas graficas;
EXP.LIST <- list.files(pattern="\\.XLS$") #Cria um vetor de caracteres contendo os nomes dos arquivos com extensao .XLS;
REPLICATES1 <- rep(1, each=44) #Vetor contendo o numero exato de contagens efetuadas para cada amostra;
REPLICATES2 <- c(rep(3, times=13), 2, 3) #Vetor contendo o numero exato de replicas aplicadas para amostras iniciais, frascos experimentais e frascos controles;
DATA <- read.csv("DATA.txt", sep="\t")  #Arquivo contendo o numero de individuos incubados, o numero de individuos ao final das incubacoes, o intervalo de incubacao;
#################################################################

INGESTION (EXP.LIST, REPLICATES1, REPLICATES2, DATA)




  